package com.zenithmind.mall.service;

import com.zenithmind.common.result.PageResult;
import com.zenithmind.mall.pojo.query.ProductQuery;
import com.zenithmind.mall.pojo.vo.ProductVO;

import java.util.List;

/**
 * 商品查询服务接口 - 遵循接口隔离原则，专门负责商品的查询操作
 * 
 * @author ZenithMind Team
 * @since 2025-07-03
 */
public interface ProductQueryService {

    /**
     * 分页查询商品列表
     * 
     * @param query 查询条件
     * @return 商品列表
     */
    PageResult<ProductVO> getProductPage(ProductQuery query);

    /**
     * 根据ID查询商品详情
     * 
     * @param id 商品ID
     * @return 商品详情
     */
    ProductVO getProductById(String id);

    /**
     * 查询推荐商品
     * 
     * @param limit 限制数量
     * @return 推荐商品列表
     */
    List<ProductVO> getRecommendProducts(Integer limit);

    /**
     * 查询热销商品
     * 
     * @param limit 限制数量
     * @return 热销商品列表
     */
    List<ProductVO> getHotProducts(Integer limit);

    /**
     * 查询新品
     * 
     * @param limit 限制数量
     * @return 新品列表
     */
    List<ProductVO> getNewProducts(Integer limit);

    /**
     * 根据分类查询商品
     * 
     * @param categoryId 分类ID
     * @param limit 限制数量
     * @return 商品列表
     */
    List<ProductVO> getProductsByCategory(String categoryId, Integer limit);

    /**
     * 根据品牌查询商品
     * 
     * @param brand 品牌
     * @param limit 限制数量
     * @return 商品列表
     */
    List<ProductVO> getProductsByBrand(String brand, Integer limit);

    /**
     * 搜索商品
     * 
     * @param keyword 关键词
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 搜索结果
     */
    PageResult<ProductVO> searchProducts(String keyword, Integer pageNum, Integer pageSize);

    /**
     * 获取相关商品
     * 
     * @param productId 商品ID
     * @param limit 限制数量
     * @return 相关商品列表
     */
    List<ProductVO> getRelatedProducts(String productId, Integer limit);

    /**
     * 获取用户浏览过的商品
     * 
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 浏览过的商品列表
     */
    List<ProductVO> getUserViewedProducts(String userId, Integer limit);
}
